package migrate

import (
	"context"

	"system-admin/config/mysql"
	"system-admin/internal/app/web/service/user"
	"system-admin/internal/define"
	"system-admin/internal/models"

	"192.168.1.75/go-pkg/logx"
)

// Install 首次安装
// 需要安装数据库和一些默认设置
func Install() error {
	tx := mysql.NewDB().Begin()
	// 异常处理
	defer func() {
		if err := recover(); err != nil {
			logx.Error(context.Background(), "autoMigrate failed", logx.Any("error", err))
			tx.Rollback()
		}
	}()

	// 初始化表结构
	{
		err := tx.Set("gorm:table_options", "ENGINE=InnoDB").
			Set("gorm:table_options", "CHARSET=utf8mb4").
			Set("gorm:table_options", "COLLATE=utf8mb4_bin").
			AutoMigrate(models.Models...)
		if err != nil {
			logx.Error(context.Background(), "autoMigrate failed", logx.Err(err))
			tx.Rollback()
			return err
		}
	}

	// 创建超级管理员
	{
		user.CreateSuperAdmin()
	}

	// 初始化地区信息
	{
		// tx.Exec(areasql)
	}

	// 插入数据库版本信息
	{
		var version models.Version
		rs := tx.Model(&models.Version{}).Attrs(models.Version{
			ID:      "1",
			Version: define.DBVersion,
		}).FirstOrCreate(&version)
		if rs.Error != nil {
			logx.Error(context.Background(), "insert version failed", logx.Err(rs.Error))
			tx.Rollback()
			return rs.Error
		}
	}
	tx.Commit()
	return nil
}
